ในช่วงเริ่มต้นของการพัฒนาภาษาจาวาสคริปต์ การปนเปื้อนชื่อพื้นที่ (Namespace Pollution) เป็นอุปสรรคสำคัญ เมื่อโค้ดที่ไม่เกี่ยวข้องกันใช้ชื่อตัวแปรระดับโลกเพียงชุดเดียว อาจเกิดการชนกันที่คาดการณ์ไม่ได้ การออกแบบในยุคปัจจุบันเปลี่ยนจากท่าทีไร้โครงสร้างไปสู่ ระบบที่จัดกลุ่มโมดูลแยกต่างหาก.
1. การแยกตัวอย่างฟังก์ชัน (IIFE)
โดยห่อโค้ดไว้ใน การแสดงออกของฟังก์ชันที่เรียกใช้ทันที (IIFE) เราจะสร้างบริเวณที่ซ่อนเร้นขึ้นมา ตัวแปรเช่น names จะถูกจำกัดอยู่ภายในฟังก์ชัน และไม่สามารถเข้าถึงได้จากสภาพแวดล้อมระดับโลก
var internal = "secret";
console.log(internal);
})();
2. หน้าต่างผ่านวัตถุ (Object-Based Interfaces)
เพื่อให้บริการแก่โลกภายนอก โมดูลจะส่งคืนวัตถุที่ทำหน้าที่เป็น หน้าต่างสาธารณะ. ซึ่งรวมเมธอดที่เกี่ยวข้อง (เช่น name และ number) เข้าไว้ภายใต้ตัวแปรระดับโลกเพียงตัวเดียวที่ถูกนำกลับมาใช้ใหม่
3. รูปแบบการส่งออก (Exports Pattern)
รูปแบบที่ซับซ้อนขึ้นหนึ่งรูปแบบ คือการส่งวัตถุ exports เข้าไปใน IIFE ซึ่งช่วยให้โมดูลสามารถต่อเนื้อหา API ตรงไปยังเป้าหมายพื้นที่ชื่อเฉพาะได้ โดยเพิ่มความยืดหยุ่นในการใช้งานโมดูล